package Offer;

class ListNode
{
	int value;
	ListNode next;
	ListNode Sibling;
	ListNode()
	{
		
	}
	ListNode(int value)
	{
		this.value=value;
	}
}
public class Test26 
{

	public static void main(String[] args) 
	{
	      ListNode node1=new ListNode(1);   
	      ListNode node2=new ListNode(2);
	      ListNode node3=new ListNode(3);   
	      ListNode node4=new ListNode(4);
	      ListNode node5=new ListNode(5);   
	      ListNode node6=new ListNode(6);
//	      node1.next=node2;
//	      node2.next=node3;
//	      node3.next=node4;
//	      node4.next=node5;
//	      node5.next=node6;
//	      node6.next=null;
	      node1.next=null;
		  ListNode newhead=cloneList(node1);
		  ListNode p = newhead;
		  while(p!=null)
		  {
			  System.out.print(p.value);
			  System.out.print(" ");
			  p=p.next;
		  }
		
	}
    public static ListNode cloneList(ListNode head)
    {
    	cloneNode(head);
    	setSibling(head);
    	return newNode(head);
    	
    }
    public static void cloneNode(ListNode head)
    {
    	ListNode p = head;
    	while(p!=null)
    	{
    		ListNode clone = new ListNode();
    		clone.value=p.value;
    		clone.next=p.next;
    		p.next=clone;
    		p=clone.next;
    	}
    }
    public static void setSibling(ListNode head)
    {
    	ListNode p1 = head;
    	while(p1!=null)
    	{
    		ListNode p2= p1.next;
    		if(p1.Sibling!=null)
    		{
    			p2.Sibling=p1.Sibling.next;
    		}
    		p1=p2.next;
    	}
    }
    public static ListNode newNode(ListNode head)
    {
    	ListNode newHead = null;
    	ListNode p1 =head;
    	ListNode p2 =null;
    	if(p1!=null)
    	{
    	    newHead=p1.next;   	 
	    	    	
	    	while(p1.next.next!=null)
	    	{
	    		p2=p1.next;
	    	    p1.next = p2.next;
	    	    p2.next=p2.next.next;
	    	    p1=p1.next;
	    	    p2=p2.next;   		
	    	}
    	}
    	return newHead; 
    }
}
